// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLName_ptr ;
// import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
#pragma once
#include "../../../ast/statement/SQLForeignKeyImpl.h"

class SQLName;
class DbType;
class SQLASTVisitor;
class MySqlASTVisitor;

class MysqlForeignKey :virtual public SQLForeignKeyImpl {
  public:
    SQLName_ptr  indexName;
    BOOL_ptr hasConstraint;
    SQLForeignKeyImpl_Match_ptr referenceMatch;
    SQLForeignKeyImpl_Option_ptr  onUpdate;
    SQLForeignKeyImpl_Option_ptr  onDelete;

    MysqlForeignKey() ;
  SHAREDOBJECT(MysqlForeignKey);

    SQLName_ptr  getIndexName() ;

    void setIndexName(SQLName_ptr  indexName) ;

    BOOL_ptr isHasConstraint() ;

    void setHasConstraint(BOOL_ptr hasConstraint) ;

    // @Override
    void accept0(SQLASTVisitor_ptr  visitor) override;

    void accept0(MySqlASTVisitor_ptr visitor) ;

    // MysqlForeignKey* clone() ;
  virtual SQLObject_ptr clone();
    SQLForeignKeyImpl_Match_ptr getReferenceMatch() ;

    void setReferenceMatch(SQLForeignKeyImpl_Match_ptr referenceMatch) ;

    SQLForeignKeyImpl_Option_ptr  getOnUpdate();

    void setOnUpdate(SQLForeignKeyImpl_Option_ptr  onUpdate) ;

    SQLForeignKeyImpl_Option_ptr  getOnDelete() ;

    void setOnDelete(SQLForeignKeyImpl_Option_ptr  onDelete);
};
